#!/usr/bin/env bash
#
# Author: Markus Wenzel, TU Muenchen
#
# DESCRIPTION: install standalone Isabelle executables


PRG=$(basename "$0")

function usage()
{
  echo
  echo "Usage: isabelle $PRG [OPTIONS] BINDIR"
  echo
  echo "  Options are:"
  echo "    -d DISTDIR   refer to DISTDIR as Isabelle distribution"
  echo "                 (default ISABELLE_HOME)"
  echo
  echo "  Install Isabelle executables with absolute references to the"
  echo "  distribution directory."
  echo
  exit 1
}

function fail()
{
  echo "$1" >&2
  exit 2
}


## process command line

# options

DISTDIR="$ISABELLE_HOME"
BINDIR=""

while getopts "d:" OPT
do
  case "$OPT" in
    d)
      DISTDIR="$OPTARG"
      ;;
    \?)
      usage
      ;;
  esac
done

shift $(($OPTIND - 1))


# args

[ "$#" -ge 1 ] && { BINDIR="$1"; shift; }
[ "$#" -ne 0 -o -z "$BINDIR" ] && usage


## main

echo "referring to distribution at \"$DISTDIR\""

mkdir -p "$BINDIR" || fail "Bad directory: \"$BINDIR\""

for NAME in isabelle isabelle_java isabelle_scala_script
do
  BIN="$BINDIR/$NAME"
  DIST="$DISTDIR/bin/$NAME"
  echo "installing $BIN"
  rm -f "$BIN"
  echo "#!/usr/bin/env bash" > "$BIN" || fail "Cannot write file: $BIN"
  echo >> "$BIN"
  echo "exec \"$DIST\" \"\$@\"" >> "$BIN"
  chmod +x "$BIN"
done
